﻿
" 于亚东vim
" http://v.youku.com/v_show/id_XMzIxODg0MzQ4.html


" vimscript http://learnvimscriptthehardway.onefloweroneworld.com/


" 判断版本 设置帮助文档为中文版
" http://vimcdoc.sourceforge.net/
" Set Vim help to Chinese and utf-8 encoding

if version >= 603
  set helplang=cn
endif



scriptencoding utf-8
set encoding=utf-8
set fileencoding=utf-8
set bomb

" vim command line customization
set wildmode=list:longest,list:full

set fileencodings=ucs-bom,utf-8,cp936,gbk,gb2312,gb18030,big5,euc-jp,euc-kr,latin1
" 字符编码列表，编辑已存在文件时依次尝试的编码格式。不用于新文件

" 指定菜单翻译的语言，从$RUMTIMEPATH/lange目录中载入相应的文件
" set langmenu=zh_CN.UTF-8
" 解决console和界面的乱码
" language messages zh_CN.utf-8

set termencoding=utf-8 " 屏幕显示的编码

set nocompatible   " 关闭 vi 兼容模式

set wildmenu       " 命令行补全增强模式,在输入命令时列出匹配项目

" 默认打开的窗口大小
" lines是上下宽度,以行为单位
" columns是左右宽度,以字符个数为单位
set lines=40 columns=140


set number         " 显示行号
set tabstop=4      " 设定 tab 长度为
set softtabstop=4  " 编辑时执行<tab>或<BackSpace>的时候,把<tab>作为空格的数目
set shiftwidth=4   " 设定 cindent、<<、>> 缩进每一步使用的空白数目
set smarttab       " 如果打开,行首的<tab>根据shiftwidth值插入。如果关闭，则取决于tapstop等值

" 搜索
set ignorecase     " 搜索时忽略大小写，但在有一个或以上大写字母时仍大小写敏感
set smartcase      " 如果搜索模式包含大写字母，忽略ignorecase

set incsearch      " 输入搜索命令时，实时显示匹配结果
set hlsearch       " 搜索时高亮显示被找到的结果

set autoindent     " 打开自动缩进，通常与smartindent同时打开
set smartindent    " 智能自动缩进


set backspace=indent,eol,start
" backspace有几种工作方式，默认是vi兼容的。对新手来说很不习惯。对老vi 不那么熟悉的人也都挺困扰的。可以用
" indent: 如果用了:set indent,:set ai 等自动缩进，想用退格键将字段缩进的删掉，必须设置这个选项。否则不响应。
" eol:如果插入模式下在行开头，想通过退格键合并两行，需要设置eol。
" start：要想删除此次插入前的输入，需设置这个。

" set iskeyword+=_,$,@,%,#,-	" 将这些字符作为关键字，带有这些符号的单词不换行
" set linebreak               " 英文单词在换行时不被截断
" set textwidth=100           " 设置每行80个字符自动换行，加上换行符
" set wrap                    " 设置自动折行

" 标签页
set tabpagemax=20  " 最多20个标签
set showtabline=2  " 总是显示标签栏

set shortmess=atI  " 启动的时候不显示那个援助乌干达儿童的提示
set showmatch      " 插入括号时，短暂显示括号配对情况，显示匹配的时间由matchtime决定
set matchtime=3    " 单位是十分之一秒
set ruler          " 显示光标位置的行号和列号
set nosol          " 普通模式下光标行间移动时不到行首的第一个非空白，而是尽量在同一列



	
set list           " 显示换行 tab等特殊符号
let &listchars="tab:\u00bb\ ,eol:\u00ac,trail:\u2022,precedes:<,extends:>"

" 查看:help dig 
" tab   [\u21E2,\u21E5,\u21E8,\u2192,\u21D2,\u25B8,\u00bb]
" trail [\u25CF,\u2639,\u267A,\u261F,\uF8FF]
" eol   [\u21B2,\u21B5,\u00b6,\u21A9,\u23CE,\u00AC]

"set listchars=listchars "tab:\|\ ,eol:¬,trail:~,precedes:<,extends:>
"win7 64 bug:https://groups.google.com/forum/#!topic/vim_dev/gkw9zONYReM

set autoread       " 设置当文件被改动时自动载入
set nobackup       " 覆盖文件时不备份
set nowritebackup  " 文件保存后取消备份
set magic          " 设置模式的魔术
set autochdir      " 自动设当前编辑的文件所在目录为当前工作路径 会在打开文件、切换/删除缓冲区、打开/关闭窗口等操作时，选择文件所在的目录

" No annoying sound on errors
set noerrorbells     " 去掉输入错误的提示声音
set novisualbell     " 不要闪烁
set t_vb=
set tm=500

set history=700      " 命令行历史记录的行数，可以用上下箭头选择

filetype on          " 侦测文件类型
filetype plugin on   " 载入文件类型插件
filetype indent on   " 为特定文件类型载入相关缩进文件


" 让配置变更立即生效
autocmd BufWritePost $MYVIMRC source $MYVIMRC
" F12快捷键 修改vimrc文件
nmap <F12> :e $MYVIMRC<CR>

" 十字光标
set cursorline                  " 设置光标十字坐标，高亮当前行
hi cursorline guibg=#222222     " 高亮当前行的背景颜色
set cursorcolumn                " 设置光标十字坐标，高亮当前列
hi CursorColumn guibg=#222222   " 高亮当前列的背景颜色


" 在所有模式下都允许使用鼠标，还可以是n,v,i,c等
set mouse=a
" Hide the mouse cursor while typing
set mousehide


" set verbose=9        " 调试信息 设置自动命令回显


" 设置字体为微软雅黑+Consolas混合字体
set guifont=YaHei\ Consolas\ Hybrid:h12
" 开启抗锯齿渲染
 set anti


" 比较流行的一个配色主题
" http://ethanschoonover.com/solarized
" https://github.com/tomasr/molokai
" http://leetless.de/vim.html

" /.vim/colors/dracula.vim
" https://draculatheme.com/vim/
syntax on
color dracula


if version >= 800
	 set rop=type:directx
endif

" 默认GUI界面
if has("gui_running")
  " 禁用左右滚动条
  set guioptions-=r
  set guioptions-=R
  set guioptions-=l
  set guioptions-=L

  " F11 切换工具栏和菜单栏 Toggle Menu and Toolbar
  set guioptions-=m      " 隐藏菜单栏
  set guioptions-=T      " 使不活动的菜单项变灰，默认是不显示
  map <silent> <F11> :if &guioptions =~# 'T' <Bar>
        \set guioptions-=T <Bar>
        \set guioptions-=m <bar>
    \else <Bar>
        \set guioptions+=T <Bar>
        \set guioptions+=m <Bar>
    \endif<CR>
endif




" TAB标签页管理：
" shift+N 新建 
"      +W 关闭
"      +← 左切换
"      +→ 右切换
nmap <S-N>     :tabnew<CR>
nmap <S-W>     :tabc<CR>
nmap <S-Left>  :tabp<CR>
nmap <S-Right> :tabn<CR>



" ==================plugs===================



" vim-airline 插件配置
" https://github.com/vim-airline/vim-airline   Configuration
" 最后一个窗口何时有状态栏：0为永不，1为至少两个窗口时，2为总是
set laststatus=2



" 记录当前工作目录，下次打开自动恢复最后一次工作目录
function! LoadCWD()
	try
		let l:cwdfile = expand('$HOME') . '/.cwd'
		if filereadable(l:cwdfile)
			let l:cwd = join(readfile(l:cwdfile), '')
			let l:cmd = "cd " . substitute(l:cwd, "\\", "\\\\", 'g')
			execute l:cmd
		endif
	endtry
endfunction

function! SaveCWD()
  let l:cwdfile = expand('$HOME') . '/.cwd'
  call writefile([getcwd()], l:cwdfile)
endfunction

autocmd VimEnter * call LoadCWD()
autocmd VimLeave * call SaveCWD()




" Tabular 代码格式对齐 对齐=:等符号
" https://github.com/godlygeek/tabular
" http://vimcasts.org/episodes/aligning-text-with-tabular-vim/


" 
" https://github.com/SirVer/ultisnips



" nerdtree 文件管理器插件配置
" https://github.com/scrooloose/nerdtree
" NERDTree automatically when vim starts up
" autocmd vimenter * NERDTree
" Ctrl+n快捷键切换显示文件管理器
map <C-n> :NERDTreeToggle<CR>
" 当打开 NERDTree 窗口时，自动显示 Bookmarks
let NERDTreeShowBookmarks=1




" emmet 插件配置
" https://github.com/mattn/emmet-vim

let g:user_emmet_install_global = 1

" enable all function in all mode.
let g:user_emmet_mode='a'

" 设置快捷键为 F2 + , 使用 emmet
let g:user_emmet_leader_key = '<F2>'

" css less html 文件支持 tab快捷键
function! EmmetTab()            "如果空白tab应该要默认缩进
  if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
     return "\<Tab>"
  elseif emmet#isExpandable()   "如果支持emmet解析
    let code = emmet#util#closePopup() . emmet#expandAbbr(0,"")
    return code
  else                          "提示自动补全
    return "\<C-N>"
  endif
endfunction
autocmd FileType css,less,html,php,xml inoremap <tab> <C-R>=EmmetTab()<CR>




" vim-less-autocompile
" https://github.com/plasticscafe/vim-less-autocompile
" deps:  node.js   &   npm install -g less   &   npm install -g less-plugin-tsdk

let g:less_autocompile=1
